// Package main 实现了一个gRPC服务器，用于演示gRPC服务端的基本实现
package main

import (
	"context"
	"fmt"
	"grpc_study/grpc_proto/hello_grpc"
	"net"

	"google.golang.org/grpc"
	"google.golang.org/grpc/grpclog"
)

// HelloService 定义Hello服务结构体
type HelloService struct {
}

// SayHello 实现HelloService接口的SayHello方法
// 参数:
//   - ctx: 上下文信息
//   - request: Hello请求参数
//
// 返回值:
//   - res: Hello响应结果
//   - err: 错误信息
func (HelloService) SayHello(ctx context.Context, request *hello_grpc.HelloRequest) (res *hello_grpc.HelloResponse, err error) {
	// 打印请求信息到控制台
	fmt.Println(request)

	// 返回响应结果
	return &hello_grpc.HelloResponse{
		Name:    "枫枫",
		Message: "ok",
	}, nil
}

// main 函数是程序的入口点，负责启动gRPC服务器
func main() {
	// 监听指定端口
	listen, err := net.Listen("tcp", ":8080")
	if err != nil {
		grpclog.Fatalf("Failed to listen: %v", err)
	}

	// 创建一个gRPC服务器实例
	s := grpc.NewServer()
	server := HelloService{}

	// 将server结构体注册为gRPC服务
	hello_grpc.RegisterHelloServiceServer(s, &server)

	// 打印服务器启动信息
	fmt.Println("grpc server running :8080")

	// 开始处理客户端请求
	err = s.Serve(listen)
	if err != nil {
		grpclog.Fatalf("Failed to serve: %v", err)
	}
}
